#include "ODESolver.h"

using namespace XYF;

// Runge-Kutta 方法计算 N 步递推的结果，返回计算时间
Real ODESolver::solve(FuncXXt f, TimeGrid &G, RungeKutta *Z)
{
    // 计算步数
    int N = G.size();

    // 指针位置
    GTimer U = G.begin();

    // 开始计时
    clock_t start = clock();

    // 循环计算每一步，N 个节点，移动 N-1 次
    for (int i = 1; i < N; i++)
        U = Z->shift(f, U);

    // 结束计时
    Real t = Real(clock() - start) / CLOCKS_PER_SEC;

    return t;
}